Integration / Deconvolution using Single-Cell Data

Visium assays are around ~50um in size so spots can be classed as “bulk” genes.

Anchor-based Integration methods (Seurat v3 / v4) is the probabilistic transfer of cell type annotations from scRNA-seq to spatial data (different from deconvolution).

Matches expression profiles/ noise distribution between single-cell reference and spatial spots

  • Finds anchors/correspondences between datasets
  • Transfers labels from single cells to spatial spots

Key Assumption: - Each spatial spot is dominated by one cell type - Focus on identifying the primary cell type per spot


A. Key Differences Comparison

Click to show table
Aspect Integration Deconvolution
Goal Identify dominant cell type Quantify all cell type proportions
Output Discrete labels Continuous proportions
Spot Assumption One dominant cell type Multiple mixed cell types
Computational Focus Pattern matching Mathematical decomposition
Biological Reality Simplified view More realistic for 55μm spots
Speed Fast Slower
Complexity Simple Complex
Quantitative Info Low High
Mixed Cell Handling Poor Excellent
Interpretation Easy Moderate
Best for Visium Good for exploration Better for analysis
Reference Requirements Standard High quality needed


B. Cheatsheet: Spatial Platform-Specific Method Performance

Click to show table

Comprehensive Method Benchmarking: Deconvolution vs Integration vs Hybrid

Platform Resolution Best Deconvolution Best Integration Best Hybrid Recommended Approach
10x Visium 55μm CARD, Cell2location, RCTD Seurat v3/v4 anchors Tangram Deconvolution preferred
Slide-seqV2 10μm Cell2location, RCTD Seurat anchors, Harmony Tangram, CytoSPACE Deconvolution preferred
MERFISH Single-cell Cell2location, SpatialDecon Seurat anchors Tangram Hybrid or Integration
seqFISH+ Single-cell CARD, DestVI Seurat anchors Tangram Hybrid or Integration
Stereo-seq 500nm-1μm SpatialDecon, CARD Seurat anchors Tangram Deconvolution preferred
Xenium Subcellular Cell2location Seurat v4 anchors Tangram, CytoSPACE Hybrid recommended
CosMx Single-cell Cell2location Seurat anchors Tangram Hybrid recommended


Cheatsheet: Technology-Specific Deconvolution Performance Matrix

Click to show table
Method Visium Slide-seqV2 MERFISH seqFISH+ Stereo-seq
CARD ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
Cell2location ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐
RCTD ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
Tangram ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐
SpatialDWLS ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
SpatialDecon ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐
STdeconvolve ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐ ⭐⭐⭐
DestVI ⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
# Install packages if not already installed
# install.packages(c("Seurat", "Matrix", "ggplot2", "viridis", "patchwork", "dplyr"))
# install.packages(c("sp", "spdep", "spatstat", "pheatmap", "sctransform"))
# SeuratData::InstallData("stxBrain.SeuratData")

# devtools::install_github('satijalab/seurat-data')
# devtools::install_github("dmcable/spacexr", build_vignettes = FALSE)

# Load essential libraries
library(Seurat)        # v5.3.1 - main spatial analysis package
library(SeuratData)    # Example Data to Analyse
library(ggplot2)       # for visualization
library(dplyr)         # for data manipulation
library(Matrix)        # for sparse matrices
library(viridis)       # for color palettes
library(patchwork)     # for combining plots
library(spdep)         # for spatial statistics
library(pheatmap)      # for heatmaps
library(sctransform)   # for SCTransform normalization
library(future)        # for parallel processing
library(knitr)         # for visualising tables
library(spacexr)       # for Robust Cell Type Decomposition
library(ggsci)         # distinct colots

# Increase the memory limit for parallel processing
options(future.globals.maxSize = 8000 * 1024^2)  # Set to 4GB

# Set seed for reproducibility
set.seed(42)
seurat_obj <- readRDS( "G:/SpatialOmics/Tx/cache/stxBrain_anterior2_processed_1.RDS")

1.1 Preparing Data

We want to use a cortical scRNA-seq dataset.

Best practise subset the spatial data to match the scRNA-Seq data (in this case the cortex)

1.2 Extract Cortical Region

# Subset to clusters of interest
cortex <- subset(seurat_obj, seurat_clusters %in% c(0,1))

# Extract and attach spatial coordinates from anterior1 image
centroids <- cortex[["anterior2"]]@boundaries$centroids
coords <- setNames(as.data.frame(centroids@coords), c("x", "y"))
rownames(coords) <- centroids@cells

cortex$x <- coords[colnames(cortex), "x"]
cortex$y <- coords[colnames(cortex), "y"]

# Perform spatial subsetting using image position Subset to upper right quadrant
cortex <- subset(cortex, y <= min(cortex$y ) | x >= max(cortex$x ), invert = TRUE)

# Visualize the subsetted data on full image vs cropped image
p1 <- SpatialDimPlot(cortex, crop = TRUE, label = TRUE)
p2 <- SpatialDimPlot(cortex, crop = FALSE, label = TRUE, pt.size.factor = 1, label.size = 3)
p1 + p2

# Best Practice:  Renormalize spatial data
cortex <- SCTransform(cortex, assay = "Spatial", verbose = FALSE) %>%
  RunPCA(verbose = FALSE)

2 Anchor Based scRNA-Seq integration

Reference scRNA-seq dataset: taxonomy from the Allen Institute

Source Data Allen Brain Map
Species Adult mouse
Tissue Cortex
Platform SMART-Seq2
Integration Method ‘anchor’-based (Seurat v3)
#~~~~~~~~~~~~~~
# 2.1 Get Single Cell Data for Cortex ~~~~~~~~~~~~
#~~~~~~~~~~~~~~
if (!file.exists("G:/SpatialOmics/Tx/cache/allen-brain-processed.RDS")) {
  
  # Download File
  if (!file.exists("G:/SpatialOmics/Tx/allen_cortex.rds")) {
    download.file(url = "https://www.dropbox.com/s/cuowvm4vrf65pvq/allen_cortex.rds?dl=1" 
                  , destfile = "G:/SpatialOmics/Tx/allen_cortex.rds", 
                  , method = "auto"
                  , mode = "wb") 
  }
  
  allen_reference <- readRDS("G:/SpatialOmics/Tx/allen_cortex.rds")
  
  allen_reference <- UpdateSeuratObject(allen_reference)
  Idents(allen_reference) <- "subclass"
  
  # Normalize Data
  allen_reference <- SCTransform (
    allen_reference
    , ncells = 3000 # learns noise models on 3000 cells, whole dataset normalised with no loss in performance
    , verbose = FALSE ) %>% 
    # PCA
    RunPCA(verbose = FALSE)  %>% 
    # UMAP
    RunUMAP( dims = 1:30 )
  
  saveRDS(allen_reference, "G:/SpatialOmics/Tx/cache/allen-brain-processed.RDS")
  
} else {
  allen_reference <- readRDS("G:/SpatialOmics/Tx/cache/allen-brain-processed.RDS")
}
# the annotation is stored in the 'subclass' column of object metadata
DimPlot(allen_reference, group.by = "subclass", label = TRUE)
UMAP Plot of reference scRNA-Seq data

UMAP Plot of reference scRNA-Seq data


2.2 Find and Transfer labels

Hoes does FindTransferAnchors Function work?

Click to show table
  • Step 1: Feature Selection & Dimensional

  • Find intersect of most variable genes in scRNA-Seq and Spatial data

  • Dimension reduction (PCA / CCA)

  • Step 2: Mutual Nearest Neighbor (MNN). For each spot in Spatial data dataset:

  • Find k nearest neighbors in scRNA-Seq

  • For each neighbor, check if Spatial spot is also its neighbor

  • If mutual → potential “anchor pair”

  • Step 3: Anchor Filtering & Scoring

  • Distance threshold (closer = better)

  • Neighborhood overlap score

  • Local neighborhood structure consistency

anchors <- FindTransferAnchors(
  reference = allen_reference        # Reference dataset (scRNA-seq) to transfer annotations from
  , query = cortex                   # Query dataset (spatial transcriptomics) to receive annotations
  , normalization.method = "SCT"     # Normalization method to make datasets comparable (SCTransform)
)


predictions.assay <- TransferData(
  anchorset = anchors                    # Anchor pairs from FindTransferAnchors linking scRNA-Seq to spatial data
  , refdata = allen_reference$subclass   # Reference scRNA-Seq to transfer (cell type labels from metadata column)
  , prediction.assay = TRUE              # Return full prediction scores for all cell types per spot
  , weight.reduction = cortex[["pca"]]   # Dimensional reduction from query to weight anchor contributions
  , dims = 1:30                          # Dimensions to use for weighting anchor strength
  , k.weight = 49                        #  Number of neighbors to consider when weighting anchors (Def=50)
)


cortex[["predictions"]] <- predictions.assay

tmp <- predictions.assay$data[,1:5] 
tmp <- round(predictions.assay$data[,1:5], 1)
tmp <- tmp[rowSums(tmp) > 0,]
tmp[tmp==0] <-""

tmp %>%  kable(caption="Cell probablity scores for 5 spots")
Cell probablity scores for 5 spots
AAACAGAGCGACTCCT-1 AAACGTGTTCGCCCTA-1 AAACTAACGTGGCGAC-1 AAAGGGATGTAGCAAG-1 AAAGGTAAGCTGTACC-1
L6 IT 0.1 0.1 0.1
L2/3 IT 0.1 0.7 0.6
L5 PT 0.1 0.2 0.2
L4 0.1 0.1
L5 IT 0.3 0.4 0.3 0.1
Oligo 0.1 0.2 0.1
Astro 0.4 0.1 0.2 0.1
Macrophage 0.1 0.2 0.1
max 0.4 0.4 0.7 0.3 0.6

TransferData creates a probability matrix where each spatial spot gets a confidence score for every possible cell type, rather than just a single “best guess” assignment.

2.3 Visualise specific cell types

In this case: “L6 CT” cells that govern Feedback control to thalamus

DefaultAssay(cortex) <- "predictions"

SpatialFeaturePlot(cortex, features = c("L6 CT", "L2/3 IT"), pt.size.factor = 1.6, ncol = 2, crop = TRUE)

2.4 Find Spatially Variable Cell types

Spatial statistics can now be being used to find cell types that cluster together spatially, rather than finding spatially variable genes.

cortex <- FindSpatiallyVariableFeatures(
  cortex
  , assay = "predictions"
  , selection.method = "moransi"
  , features = rownames(cortex)
  , r.metric = 5
  , slot = "data"
)

top.clusters <- head(SpatiallyVariableFeatures(cortex, method = "moransi"), 4)

SpatialPlot(object = cortex, features = top.clusters, ncol = 2)


3 Spatial deconvolution using RCTD (Robust Cell Type Decomposition)

Publication: Cable et al., Nature Biotechnology 2022

Strengths:

  • Handles differences between scRNA-seq and spatial data
  • Recommended starting point by multiple benchmarking studies
  • Good for large datasets (CPU efficient)

Here we reuse the Allen Reference Dataset

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #
# 3.1 Set up query and reference with the RCTD functions "Reference" & "SpatialRNA" 
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #

if (!file.exists("G:/SpatialOmics/Tx/cache/allen-brain-rctd-ref.RDS")) {
  # Set up REFERENCE scRNA-Seq data
  ref <- UpdateSeuratObject(allen_reference)
  Idents(ref) <- "celltype"
  
  # Clusters ~~~~~~
  # Remove prohibited slash (/) from subclass names
  ref$subclass_fixed <- as.factor(ref$subclass)
  levels(ref$subclass_fixed) <- gsub("\\/", "_", levels(ref$subclass_fixed))
  cluster <- as.factor(ref$subclass_fixed)
  names(cluster) <- colnames(ref)
  # Check and remove cell types with < 25 cells
  cell_counts <- table(cluster)
  print(cell_counts)
  
  # Identify problematic cell types
  low_count_types <- names(cell_counts)[cell_counts < 25]
  cat("Cell types with < 25 cells:", paste(low_count_types, collapse = ", "), "\n")
  keep_cells <- !cluster %in% low_count_types
  cluster <- factor(cluster[keep_cells])
  
  # Counts ~~~~~~
  # Extract counts, clusters, UMI counts/spot to feed into Reference function 
  counts <- allen_reference[["RNA"]]$counts[, keep_cells]
  
  nCount_UMI <- ref$nCount_RNA
  names(nCount_UMI) <- colnames(ref)
  nCount_UMI <- nCount_UMI[keep_cells]
  
  reference <- Reference(counts   #scRNA-Seq Couunts
                         , cluster  #preidenfied cell clusters
                         , nCount_UMI #library size
  )
  
  # Set up QUERY Spatial Data
  counts <- cortex[["Spatial"]]$counts
  coords <- GetTissueCoordinates(cortex)
  colnames(coords) <- c("x", "y")
  
  coords[is.na(colnames(coords))] <- NULL
  
  # Create SpatialRNA object for the RCTD
  query <- SpatialRNA(
    coords               # Spatial coordinates
    , counts             # Gene Count Matrix (Raw)
    , colSums(counts)    # Library size (Umi / spot)
  )
  
  saveRDS(reference, "G:/SpatialOmics/Tx/cache/allen-brain-rctd-ref.RDS") 
  saveRDS(query, "G:/SpatialOmics/Tx/cache/stxbrain-rctd-query.RDS") 
} else {
  reference <- readRDS("G:/SpatialOmics/Tx/cache/allen-brain-rctd-ref.RDS") 
  query <- readRDS("G:/SpatialOmics/Tx/cache/stxbrain-rctd-query.RDS") 
} 

3.1 Run RCTD

  • Reference scRNA-Seq and query Spatial data are used to annotate the spatial dataset
  • Cell type labels added to the query Spatial data.
  • Note: RCTD has parallel processing options.
How does RCTD work
Click to show table
  • Finds cell type markers using scRNA-seq
  • Find cell type composition (cell proportions) of each spatial data spot
  • Get weighted sums for (a) gene expression per cell type (b) cell proportion per spot
  • Accounts for technical differences between scRNA-seq and spatial data
  • Uses maximum likelihood estimation to find best-fitting proportions
  • Classifies spots based on confidence
  • “singlet”: >95% one cell type)
  • “doublet”: mixture of 2 cell types
  • “reject”: poor fit/ambiguous
RCTD <- create.RCTD(query
                    , reference
                    , max_cores = 7
)
## 
##      Astro       Endo    L2_3 IT         L4      L5 IT      L5 PT      L6 CT 
##        368         94        982       1401        880        544        960 
##      L6 IT        L6b      Lamp5 Macrophage      Meis2         NP      Oligo 
##       1872        358       1122         51         45        362         91 
##       Peri      Pvalb   Serpinf1        SMC       Sncg        Sst        Vip 
##         32       1337         27         55        125       1741       1728 
##       VLMC 
##         67
RCTD <- run.RCTD(
  RCTD  # RCTD object containing spatial data and reference for deconvolution
  , doublet_mode = "doublet" # Deconvolution mode allowing spots to contain 1-2 dominant cell types
)

# Add result to Seurat Object
cortex <- AddMetaData(
  cortex
  , metadata = RCTD@results$results_df
)


cat("RCTD metadata columns:\n") 
## RCTD metadata columns:
colnames(cortex@meta.data)
##  [1] "orig.ident"       "nCount_Spatial"   "nFeature_Spatial" "slice"           
##  [5] "region"           "spatial_x"        "spatial_y"        "percent.mt"      
##  [9] "nCount_SCT"       "nFeature_SCT"     "SCT_snn_res.0.8"  "seurat_clusters" 
## [13] "cluster_names"    "x"                "y"                "spot_class"      
## [17] "first_type"       "second_type"      "first_class"      "second_class"    
## [21] "min_score"        "singlet_score"    "conv_all"         "conv_doublet"

3.2 Plot the RCTD annotations.

In doublet mode you get:

  • first_type: most dominant gene per spot
  • second_type: second most dominant gene per spot
p1 <- SpatialDimPlot(cortex, group.by = "first_type") + 
  scale_fill_npg()
p2 <- SpatialDimPlot(cortex, group.by = "second_type")+ 
  scale_fill_npg()
p1 | p2


Session Info

Click to show table
sessioninfo::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.5.0 (2025-04-11 ucrt)
##  os       Windows 10 x64 (build 19045)
##  system   x86_64, mingw32
##  ui       RTerm
##  language (EN)
##  collate  English_United Kingdom.utf8
##  ctype    English_United Kingdom.utf8
##  tz       Europe/London
##  date     2025-07-20
##  pandoc   3.2 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)
##  quarto   NA @ C:\\PROGRA~1\\RStudio\\RESOUR~1\\app\\bin\\quarto\\bin\\quarto.exe
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package              * version    date (UTC) lib source
##  abind                  1.4-8      2024-09-12 [1] CRAN (R 4.5.0)
##  boot                   1.3-31     2024-08-28 [2] CRAN (R 4.5.0)
##  bslib                  0.9.0      2025-01-30 [1] CRAN (R 4.5.0)
##  cachem                 1.1.0      2024-05-16 [1] CRAN (R 4.5.0)
##  class                  7.3-23     2025-01-01 [2] CRAN (R 4.5.0)
##  classInt               0.4-11     2025-01-08 [1] CRAN (R 4.5.1)
##  cli                    3.6.5      2025-04-23 [1] CRAN (R 4.5.0)
##  cluster                2.1.8.1    2025-03-12 [2] CRAN (R 4.5.0)
##  codetools              0.2-20     2024-03-31 [2] CRAN (R 4.5.0)
##  cowplot                1.2.0      2025-07-07 [1] CRAN (R 4.5.1)
##  crayon                 1.5.3      2024-06-20 [1] CRAN (R 4.5.0)
##  data.table             1.17.2     2025-05-12 [1] CRAN (R 4.5.0)
##  DBI                    1.2.3      2024-06-02 [1] CRAN (R 4.5.0)
##  deldir                 2.0-4      2024-02-28 [1] CRAN (R 4.5.0)
##  dichromat              2.0-0.1    2022-05-02 [1] CRAN (R 4.5.0)
##  digest                 0.6.37     2024-08-19 [1] CRAN (R 4.5.0)
##  doParallel             1.0.17     2022-02-07 [1] CRAN (R 4.5.1)
##  dotCall64              1.2        2024-10-04 [1] CRAN (R 4.5.1)
##  dplyr                * 1.1.4      2023-11-17 [1] CRAN (R 4.5.0)
##  e1071                  1.7-16     2024-09-16 [1] CRAN (R 4.5.1)
##  evaluate               1.0.3      2025-01-10 [1] CRAN (R 4.5.0)
##  farver                 2.1.2      2024-05-13 [1] CRAN (R 4.5.0)
##  fastDummies            1.7.5      2025-01-20 [1] CRAN (R 4.5.1)
##  fastmap                1.2.0      2024-05-15 [1] CRAN (R 4.5.0)
##  fitdistrplus           1.2-4      2025-07-03 [1] CRAN (R 4.5.1)
##  foreach                1.5.2      2022-02-02 [1] CRAN (R 4.5.1)
##  future               * 1.58.0     2025-06-05 [1] CRAN (R 4.5.1)
##  future.apply           1.20.0     2025-06-06 [1] CRAN (R 4.5.1)
##  generics               0.1.4      2025-05-09 [1] CRAN (R 4.5.0)
##  ggplot2              * 3.5.2      2025-04-09 [1] CRAN (R 4.5.1)
##  ggrepel                0.9.6      2024-09-07 [1] CRAN (R 4.5.1)
##  ggridges               0.5.6      2024-01-23 [1] CRAN (R 4.5.1)
##  ggsci                * 3.2.0      2024-06-18 [1] CRAN (R 4.5.1)
##  globals                0.18.0     2025-05-08 [1] CRAN (R 4.5.0)
##  glue                   1.8.0      2024-09-30 [1] CRAN (R 4.5.0)
##  goftest                1.2-3      2021-10-07 [1] CRAN (R 4.5.0)
##  gridExtra              2.3        2017-09-09 [1] CRAN (R 4.5.1)
##  gtable                 0.3.6      2024-10-25 [1] CRAN (R 4.5.0)
##  htmltools              0.5.8.1    2024-04-04 [1] CRAN (R 4.5.0)
##  htmlwidgets            1.6.4      2023-12-06 [1] CRAN (R 4.5.0)
##  httpuv                 1.6.16     2025-04-16 [1] CRAN (R 4.5.0)
##  httr                   1.4.7      2023-08-15 [1] CRAN (R 4.5.0)
##  ica                    1.0-3      2022-07-08 [1] CRAN (R 4.5.0)
##  igraph                 2.1.4      2025-01-23 [1] CRAN (R 4.5.1)
##  irlba                  2.3.5.1    2022-10-03 [1] CRAN (R 4.5.1)
##  iterators              1.0.14     2022-02-05 [1] CRAN (R 4.5.1)
##  jquerylib              0.1.4      2021-04-26 [1] CRAN (R 4.5.0)
##  jsonlite               2.0.0      2025-03-27 [1] CRAN (R 4.5.0)
##  KernSmooth             2.23-26    2025-01-01 [2] CRAN (R 4.5.0)
##  knitr                * 1.50       2025-03-16 [1] CRAN (R 4.5.0)
##  later                  1.4.2      2025-04-08 [1] CRAN (R 4.5.0)
##  lattice                0.22-6     2024-03-20 [2] CRAN (R 4.5.0)
##  lazyeval               0.2.2      2019-03-15 [1] CRAN (R 4.5.1)
##  lifecycle              1.0.4      2023-11-07 [1] CRAN (R 4.5.0)
##  listenv                0.9.1      2024-01-29 [1] CRAN (R 4.5.1)
##  lmtest                 0.9-40     2022-03-21 [1] CRAN (R 4.5.1)
##  magrittr               2.0.3      2022-03-30 [1] CRAN (R 4.5.0)
##  MASS                   7.3-65     2025-02-28 [2] CRAN (R 4.5.0)
##  Matrix               * 1.7-3      2025-03-11 [1] CRAN (R 4.5.1)
##  matrixStats            1.5.0      2025-01-07 [1] CRAN (R 4.5.1)
##  mime                   0.13       2025-03-17 [1] CRAN (R 4.5.0)
##  miniUI                 0.1.2      2025-04-17 [1] CRAN (R 4.5.0)
##  nlme                   3.1-168    2025-03-31 [2] CRAN (R 4.5.0)
##  parallelly             1.45.0     2025-06-02 [1] CRAN (R 4.5.1)
##  patchwork            * 1.3.1      2025-06-21 [1] CRAN (R 4.5.1)
##  pbapply                1.7-2      2023-06-27 [1] CRAN (R 4.5.1)
##  pheatmap             * 1.0.12     2019-01-04 [1] CRAN (R 4.5.0)
##  pillar                 1.10.2     2025-04-05 [1] CRAN (R 4.5.0)
##  pkgconfig              2.0.3      2019-09-22 [1] CRAN (R 4.5.0)
##  plotly                 4.11.0     2025-06-19 [1] CRAN (R 4.5.1)
##  plyr                   1.8.9      2023-10-02 [1] CRAN (R 4.5.1)
##  png                    0.1-8      2022-11-29 [1] CRAN (R 4.5.0)
##  polyclip               1.10-7     2024-07-23 [1] CRAN (R 4.5.0)
##  progressr              0.15.1     2024-11-22 [1] CRAN (R 4.5.1)
##  promises               1.3.2      2024-11-28 [1] CRAN (R 4.5.0)
##  proxy                  0.4-27     2022-06-09 [1] CRAN (R 4.5.1)
##  purrr                  1.0.4      2025-02-05 [1] CRAN (R 4.5.0)
##  R6                     2.6.1      2025-02-15 [1] CRAN (R 4.5.0)
##  RANN                   2.6.2      2024-08-25 [1] CRAN (R 4.5.1)
##  rappdirs               0.3.3      2021-01-31 [1] CRAN (R 4.5.0)
##  RColorBrewer           1.1-3      2022-04-03 [1] CRAN (R 4.5.0)
##  Rcpp                   1.0.14     2025-01-12 [1] CRAN (R 4.5.0)
##  RcppAnnoy              0.0.22     2024-01-23 [1] CRAN (R 4.5.1)
##  RcppHNSW               0.6.0      2024-02-04 [1] CRAN (R 4.5.1)
##  reshape2               1.4.4      2020-04-09 [1] CRAN (R 4.5.1)
##  reticulate             1.42.0     2025-03-25 [1] CRAN (R 4.5.1)
##  rlang                  1.1.6      2025-04-11 [1] CRAN (R 4.5.0)
##  rmarkdown              2.29       2024-11-04 [1] CRAN (R 4.5.0)
##  ROCR                   1.0-11     2020-05-02 [1] CRAN (R 4.5.1)
##  RSpectra               0.16-2     2024-07-18 [1] CRAN (R 4.5.1)
##  rstudioapi             0.17.1     2024-10-22 [1] CRAN (R 4.5.0)
##  Rtsne                  0.17       2023-12-07 [1] CRAN (R 4.5.1)
##  s2                     1.1.9      2025-05-23 [1] CRAN (R 4.5.1)
##  sass                   0.4.10     2025-04-11 [1] CRAN (R 4.5.0)
##  scales                 1.4.0      2025-04-24 [1] CRAN (R 4.5.0)
##  scattermore            1.2        2023-06-12 [1] CRAN (R 4.5.1)
##  sctransform          * 0.4.2      2025-04-30 [1] CRAN (R 4.5.1)
##  sessioninfo            1.2.3      2025-02-05 [1] CRAN (R 4.5.0)
##  Seurat               * 5.3.0      2025-04-23 [1] CRAN (R 4.5.1)
##  SeuratData           * 0.2.2.9002 2025-07-16 [1] Github (satijalab/seurat-data@3e51f44)
##  SeuratObject         * 5.1.0      2025-04-22 [1] CRAN (R 4.5.1)
##  sf                   * 1.0-21     2025-05-15 [1] CRAN (R 4.5.1)
##  shiny                  1.10.0     2024-12-14 [1] CRAN (R 4.5.0)
##  sp                   * 2.2-0      2025-02-01 [1] CRAN (R 4.5.1)
##  spacexr              * 2.2.1      2025-07-20 [1] Github (dmcable/spacexr@698d5b0)
##  spam                   2.11-1     2025-01-20 [1] CRAN (R 4.5.1)
##  spatstat.data          3.1-6      2025-03-17 [1] CRAN (R 4.5.1)
##  spatstat.explore       3.4-3      2025-05-21 [1] CRAN (R 4.5.1)
##  spatstat.geom          3.4-1      2025-05-20 [1] CRAN (R 4.5.1)
##  spatstat.random        3.4-1      2025-05-20 [1] CRAN (R 4.5.1)
##  spatstat.sparse        3.1-0      2024-06-21 [1] CRAN (R 4.5.1)
##  spatstat.univar        3.1-4      2025-07-13 [1] CRAN (R 4.5.1)
##  spatstat.utils         3.1-4      2025-05-15 [1] CRAN (R 4.5.1)
##  spData               * 2.3.4      2025-01-08 [1] CRAN (R 4.5.1)
##  spdep                * 1.3-13     2025-06-10 [1] CRAN (R 4.5.1)
##  stringi                1.8.7      2025-03-27 [1] CRAN (R 4.5.0)
##  stringr                1.5.1      2023-11-14 [1] CRAN (R 4.5.0)
##  stxBrain.SeuratData  * 0.1.2      2025-07-16 [1] local
##  stxKidney.SeuratData * 0.1.0      2025-07-18 [1] local
##  survival               3.8-3      2024-12-17 [2] CRAN (R 4.5.0)
##  tensor                 1.5.1      2025-06-17 [1] CRAN (R 4.5.0)
##  tibble                 3.2.1      2023-03-20 [1] CRAN (R 4.5.0)
##  tidyr                  1.3.1      2024-01-24 [1] CRAN (R 4.5.0)
##  tidyselect             1.2.1      2024-03-11 [1] CRAN (R 4.5.0)
##  units                  0.8-7      2025-03-11 [1] CRAN (R 4.5.1)
##  uwot                   0.2.3      2025-02-24 [1] CRAN (R 4.5.1)
##  vctrs                  0.6.5      2023-12-01 [1] CRAN (R 4.5.0)
##  viridis              * 0.6.5      2024-01-29 [1] CRAN (R 4.5.1)
##  viridisLite          * 0.4.2      2023-05-02 [1] CRAN (R 4.5.0)
##  withr                  3.0.2      2024-10-28 [1] CRAN (R 4.5.0)
##  wk                     0.9.4      2024-10-11 [1] CRAN (R 4.5.1)
##  xfun                   0.52       2025-04-02 [1] CRAN (R 4.5.0)
##  xtable                 1.8-4      2019-04-21 [1] CRAN (R 4.5.0)
##  yaml                   2.3.10     2024-07-26 [1] CRAN (R 4.5.0)
##  zoo                    1.8-14     2025-04-10 [1] CRAN (R 4.5.1)
## 
##  [1] C:/Users/Nabila/AppData/Local/R/win-library/4.5
##  [2] C:/Program Files/R/R-4.5.0/library
##  * ── Packages attached to the search path.
## 
## ──────────────────────────────────────────────────────────────────────────────